package veterinario;

import java.io.*;

/** Classe para lidar com a leitura/escrita de ficheiros de objectos.
 * 
 * @author jorge
 */
public class FicheiroDeObjectos
{
    private ObjectInputStream iS;
    private ObjectOutputStream oS;

    /** Método para abrir um ficheiro de objectos para leitura.
     * 
     * @param nomeDoFicheiro    texto com o nome do ficheiro a ser usado.
     * @throws IOException  mensagem de erro.
     */
    public void abreLeitura(String nomeDoFicheiro) throws IOException
    {
        iS = new ObjectInputStream(new FileInputStream(nomeDoFicheiro));
    }

    /** Método para abrir um ficheiro de objectos para escrita.
     * 
     * @param nomeDoFicheiro    texto com o nome do ficheiro a ser usado.
     * @throws IOException  mensagem de erro.
     */
    public void abreEscrita(String nomeDoFicheiro) throws IOException
    {
        oS = new ObjectOutputStream(new FileOutputStream(nomeDoFicheiro));
    }

    /** Método para ler um objecto do ficheiro.
     * 
     * @return  devolve objecto lido.
     * @throws IOException  mensagem de erro.
     * @throws ClassNotFoundException   mensagem de erro.
     */
    public Object leObjecto() throws IOException, ClassNotFoundException
    {
        return iS.readObject();
    }

    /** Método para escrever um objecto no ficheiro.
     * 
     * @param o objecto a ser escrito no ficheiro.
     * @throws IOException  mensagem de erro.
     */
    public void escreveObjecto(Object o) throws IOException
    {
        oS.writeObject(o);
    }

    /** Método para escrever um float no ficheiro.
     * 
     * @param o float a ser escrito no ficheiro.
     * @throws IOException  mensagem de erro.
     */
    public void escreveFloat(float o) throws IOException
    {
        oS.writeFloat(o);
    }
    
    /** Método para escrever um inteiro no ficheiro.
     * 
     * @param o inteiro a ser escrito no ficheiro.
     * @throws IOException  mensagem de erro.
     */
    public void escreveInt(int o) throws IOException
    {
        oS.writeInt(o);
    }

    /** Método para ler um float do ficheiro.
     * 
     * @return  devolve float lido.
     * @throws IOException  mensagem de erro.
     */
    public float leFloat() throws IOException{
        return iS.readFloat();
    }

    /** Método para ler um inteiro do ficheiro.
     * 
     * @return  devolve inteiro lido.
     * @throws IOException  mensagem de erro.
     */
    public float leInt() throws IOException{
        return iS.readInt();
    }

    /** Método para fechar um ficheiro de objectos após leitura.
     * 
     * @throws IOException  mensagem de erro.
     */
    public void fechaLeitura() throws IOException
    {
        iS.close();
    }

    /** Método para fechar um ficheiro de objectos após escrita.
     * 
     * @throws IOException  mensagem de erro.
     */
    public void fechaEscrita() throws IOException
    {
        oS.close();
    }
}